feat(logging): add structured request/response logging gated on WEBEX_DEBUG#16
Merged
Merged
Conversation
…_DEBUG Adds a log_tool_call() decorator and setup_logging() to tools/common.py. Every tool registration in main.py is now wrapped with the decorator so that each invocation emits: • DEBUG tool_request – tool name + entity ID kwargs (room_id, space_id, …) • DEBUG tool_response – same fields + latency_ms + status=success • WARNING tool_response – same fields + error_code + error_message on failure When WEBEX_DEBUG=true the logger is forced to DEBUG so request/response traces appear. Without it the logger honours LOG_LEVEL (default INFO), suppressing the DEBUG lines while leaving WARNING errors visible. LOG_FORMAT=json switches the handler to a single-line JSON formatter; LOG_FORMAT=text (default) produces human-readable key=value output. setup_logging() is idempotent (second call is a no-op), and functools.wraps preserves the original function's __name__/__doc__/__annotations__ so FastMCP tool registration is unaffected. Adds 18 unit tests covering setup_logging, _JsonFormatter, _kv, and log_tool_call across success, error, and metadata-capture cases.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds a log_tool_call() decorator and setup_logging() to tools/common.py.
Every tool registration in main.py is now wrapped with the decorator so
that each invocation emits:
• DEBUG tool_request – tool name + entity ID kwargs (room_id, space_id, …)
• DEBUG tool_response – same fields + latency_ms + status=success
• WARNING tool_response – same fields + error_code + error_message on failure
When WEBEX_DEBUG=true the logger is forced to DEBUG so request/response
traces appear. Without it the logger honours LOG_LEVEL (default INFO),
suppressing the DEBUG lines while leaving WARNING errors visible.
LOG_FORMAT=json switches the handler to a single-line JSON formatter;
LOG_FORMAT=text (default) produces human-readable key=value output.
setup_logging() is idempotent (second call is a no-op), and functools.wraps
preserves the original function's name/doc/annotations so
FastMCP tool registration is unaffected.
Adds 18 unit tests covering setup_logging, _JsonFormatter, _kv, and
log_tool_call across success, error, and metadata-capture cases.